package top.stmo.redis;



/**
 *      Redis的Java客户端：
 *
 *       jedis          以Redis命令作为方法名称，学习成本低，简单实用。但是Jedis实例是线程不安全的，
 *                      多线程环境下需要基于连接池来使用
 *
 *       lettuce        Lettuce是基于Netty实现的，支持同步、异步和响应式编程方式，并且是线程安全的
 *                      支持Redis的哨兵模式、集群模式和管道模式
 *
 *       Redisson       Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。
 *                      包含了诸如Map、Queue、Lock、 Semaphore、AtomicLong等强大功能
 *
 *      -------------------------------jedis-----------------------------------
 *
 *       Jedis使用的基本步骤：
 *          引入依赖
 *          创建Jedis对象，建立连接
 *          使用Jedis，方法名与Redis命令一致
 *          释放资源
 *
 *       Jedis本身是线程不安全的，并且频繁的创建和销毁连接会有性能损耗，因此我们推荐大家使用
 *       Jedis连接池代替Jedis的直连方式。
 *
 *       ----------------------------SpringData-------------------------------
 *
 *       SpringData是Spring中数据操作的模块，包含对各种数据库的集成，其中对Redis的
 *       集成模块就叫做SpringDataRedis
 *
 *          提供了对不同Redis客户端的整合（Lettuce和Jedis）
 *          提供了RedisTemplate统一API来操作Redis
 *          支持Redis的发布订阅模型
 *          支持Redis哨兵和Redis集群
 *          支持基于Lettuce的响应式编程
 *          支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
 *          支持基于Redis的JDKCollection实现
 *
 *      SpringDataRedis中提供了RedisTemplate工具类，其中封装了各种对Redis的操作。
 *      并且将不同数据类型的操作API封装到了不同的类型中：
 *
 *      API                             返回值类型                   说明
 *      redisTemplate.opsForValue()     ValueOperations         操作String类型数据
 *      redisTemplate.opsForHash()      HashOperations          操作Hash类型数据
 *      redisTemplate.opsForList()      ListOperations          操作List类型数据
 *      redisTemplate.opsForSet()       SetOperations           操作Set类型数据
 *      redisTemplate.opsForZSet()      ZSetOperations          操作SortedSet类型数据
 *      redisTemplate
 *
 *      SpringDataRedis的使用步骤：
 *          引入spring-boot-starter-data-redis依赖
 *          在application.yml配置Redis信息
 *          注入RedisTemplate
 *
 *      SpringDataRedis的序列化方式
 *          RedisTemplate可以接收任意Object作为值写入Redis，只不过写入前会把Object序列化为字节形式
 *          默认是采用JDK序列化，得到的结果是这样的：
 *
 *          缺点：
 *              可读性差
 *              内存占用较大
 *
 *      我们可以自定义RedisTemplate的序列化方式
 *      一般Key使用String类型序列化，Value一般使用转Json字符串序列化
 *
 *      为了在反序列化时知道对象的类型，JSON序列化器会将类的class类型写入json结果中，存入Redis，
 *      会带来额外的内存开销。
 *
 *      为了节省内存空间，我们并不会使用JSON序列化器来处理value，而是统一使用String序列化器，
 *      要求只能存储String类型的key和value。当需要存储Java对象时，手动完成对象的序列化和反序列化。
 *
 *      Spring默认提供了一个StringRedisTemplate类，它的key和value的序列化方式默认就是String方式。
 *      省去了我们自定义RedisTemplate的过程：
 *
 *      RedisTemplate的两种序列化实践方案：
 *          方案一：
 *          自定义RedisTemplate
 *          修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
 *          方案二：
 *          使用StringRedisTemplate
 *          写入Redis时，手动把对象序列化为JSON
 *          读取Redis时，手动把读取到的JSON反序列化为对象
 *
 */
public class RedisTest2 {



}
